/*
 * Pedido.java
 *
 * Created on 6 de Janeiro de 2008, 20:29
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package br.uff.javabasico.modelos;

import br.uff.javabasico.DAO.ItemDAOImpl;
import br.uff.javabasico.DAO.ProdutoDAOImpl;
import br.uff.javabasico.exception.BDException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author HelioKann
 */
public class Pedido implements Serializable {
    
    private static final long serialVersionUID = 1L; 
    
    private int id;
    private Cliente cliente;
    private boolean fechado;
    private List<ItemPedido> listaItens;
    private float preco;
    
    public Pedido() {
    }
    
    public void adicionaItem(Produto p, int qtd) throws BDException{
        ItemPedido ip = new ItemPedido();
        ip.setProduto(p);
        ip.setPedido(this);
        
        if ( listaItens == null ) listaItens = new ArrayList<ItemPedido>();
        
        if (listaItens.contains(ip)){
            ip = listaItens.get(listaItens.indexOf(ip));
            ip.setQtd(ip.getQtd()+qtd);
            ip.setValor(ip.getValor()+p.getPreco()*qtd);
            ip.setProduto(p);
            ItemDAOImpl.atualiza(ip);
        } else{            
            ip.setQtd(qtd);
            ip.setValor(p.getPreco()*qtd);
            listaItens.add(ip);
            ItemDAOImpl.incluir(ip);
        }
        
        if(ip.getQtd()==0){
            ItemDAOImpl.excluir(ip);
            listaItens.remove(ip);
        }
        
        
    }
    
    public ItemPedido getItemByProduto(Produto pro){
        ItemPedido it = new ItemPedido();
        it.setPedido(this);
        it.setProduto(pro);
        return listaItens.get(listaItens.indexOf(it));
    }
    
    public void removeItens() throws BDException{
        if ( listaItens == null ) return;
        
        for (ItemPedido elem : listaItens) {
            Produto p = elem.getProduto();
            p.setQtd( p.getQtd() + elem.getQtd() );
            ProdutoDAOImpl.atualiza(p);
            ItemDAOImpl.excluir(elem);
        }
        
        listaItens = null;
    }
    
    public int getId() {
        return id;
    }
    
    public void setId(int id) {
        this.id = id;
    }
    
    public Cliente getCliente() {
        return cliente;
    }
    
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }
    
    public boolean isFechado() {
        return fechado;
    }
    
    public void setFechado(boolean fechado) {
        this.fechado = fechado;
    }
    
    public List<ItemPedido> getListaItens() {
        return listaItens;
    }
    
    public void setListaItens(List<ItemPedido> listaItens) {
        this.listaItens = listaItens;
    }
    
    public float getPreco() {
        preco = 0;
        if(listaItens != null) {            
            for (ItemPedido elem : listaItens) {
                preco += elem.getValor();
            }
        }
        return preco;
    }
    
    public void setPreco(float preco) {
        this.preco = preco;
    }
    
}
